package DataBase;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import ClasesBasicas.Usuario;

public class UsuarioJDBC implements IDataBase{
	
	public static final String DRIVER_CLASS_NAME = "org.sqlite.JDBC";

	//public static final String CONNECTION_URL = "jdbc:sqlite:C:/redes.workspace/proyecto/trenes.s3db";
	public static final String CONNECTION_URL = "jdbc:sqlite:C:/Users/Raquel/workspaceRedes/trenes/src/Trenes.s3db";

	public static Connection connection;
	
	public UsuarioJDBC() throws ClassNotFoundException, SQLException{
		Class.forName(DRIVER_CLASS_NAME);
		connection= DriverManager.getConnection(CONNECTION_URL);
	}
	
	public Usuario update(String nickModificado,String nickAModificar, String password) throws SQLException{
		String sql = "UPDATE Usuario SET nick ='"+nickAModificar+"' and password='"+password+"'  WHERE nick = '"+nickModificado+"';";
		System.out.println(sql);
		
			Statement statement = connection.createStatement();
			statement.executeUpdate(sql);
			statement.close();
			
			Usuario u= new Usuario();
			u.setNick(nickAModificar);
			System.out.println("-------"+nickAModificar);
			u.setPassword(password);
			
			return u;
			
	}
	//FUNCIONA
	@Override
	public int insert(Object o) throws IllegalArgumentException,
			IllegalAccessException {
		
		if(o instanceof Usuario){
			Usuario u= (Usuario) o;
			Statement statement;
			
			String sql;
			
			sql = "INSERT INTO Usuario(nombre, apellidos, dni, nick, password)VALUES('"+u.getNombre()+"','"+u.getApellidos()+"','"+u.getDni()+"','"+u.getNick()+"','"+u.getPassword()+"');";
			System.out.println(sql);
			int filasInsertadas=0;
			try {
				statement =  connection.createStatement();
				filasInsertadas = statement.executeUpdate(sql);
				statement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
			return filasInsertadas;
			
		}
		else
			return 0;
	}

	//FUNCIONA
	@Override
	public int remove(Object o) throws SQLException {
		if(o instanceof Usuario){
			Usuario u= (Usuario) o;
		Statement statement = connection.createStatement();
		String sql = "DELETE FROM Usuario WHERE nick='"+u.getNick()+"';";
		System.out.println(sql);
		int filasBorradas=statement.executeUpdate(sql);
		statement.close();
		
		return filasBorradas;}
		else
			return 0;
	}
	//FUNCIONA
	@Override
	public Usuario getByPrimaryKey(Object o) throws SQLException {
		if(o instanceof String){
			
		String sqlStatementString = null;
		Statement statement = null;
		ResultSet resultSet = null;
		statement = connection.createStatement();
		sqlStatementString = "SELECT * FROM Usuario WHERE nick='"+o+"';";
		System.out.println(sqlStatementString);
		Usuario usuario= new Usuario();
		
		resultSet = statement.executeQuery(sqlStatementString);
		while(resultSet.next())
		{	
			usuario.setNick(resultSet.getString("nick"));
			usuario.setPassword(resultSet.getString("password"));
			usuario.setNombre(resultSet.getString("nombre"));
			usuario.setApellidos(resultSet.getString("apellidos"));
			usuario.setDni(resultSet.getString("dni"));
		

		}
		System.out.println(usuario.getNick());
		System.out.println(usuario.getApellidos());
		System.out.println(usuario.getDni());
		System.out.println(usuario.getPassword());
		resultSet.close();
		statement.close();
		return usuario;}
		else
			return null;
	}
	//devuelve siempre el ultimo introducido tantas veces kmo objectos aya en la bd
	@Override
	public ArrayList<Usuario> getAll() throws SQLException {		
			
			String sqlStatementString = null;
			Statement statement = null;
			ResultSet resultSet = null;
			statement = connection.createStatement();
			sqlStatementString = "SELECT * FROM Usuario ;";
			System.out.println(sqlStatementString);
			ArrayList<Usuario> usuarios= new ArrayList<Usuario>();
			resultSet = statement.executeQuery(sqlStatementString);
			while(resultSet.next())
			{	
				Usuario usuario= new Usuario();
				usuario.setNick(resultSet.getString("nick"));
				usuario.setPassword(resultSet.getString("password"));
				usuario.setNombre(resultSet.getString("nombre"));
				usuario.setApellidos(resultSet.getString("apellidos"));
				usuario.setDni(resultSet.getString("dni"));
				usuarios.add(usuario);

			}
			for(int i=0; i<usuarios.size();i++){
				System.out.println(usuarios.get(i).getNick());
				System.out.println(usuarios.get(i).getApellidos());
				System.out.println(usuarios.get(i).getNombre());
				System.out.println(usuarios.get(i).getPassword());
				System.out.println(usuarios.get(i).getDni());
				System.out.println("otro usuario");
			}
			resultSet.close();
			statement.close();
			return usuarios;
		
	}
	
	

}
